package studia.figlewicz.math.library;

import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Set;

public class _test_model_zero_curve {
	

	
	public static void main(String[] args) {

/////////////////////////////////////////////////////
		// projekcje
/////////////////////////////////////////////////////
		// zarzadca projekcji
		Date poczatekSymulacji = new Date(101,0,1);
		Set<Date> datySymulacji = new LinkedHashSet<Date>();
		datySymulacji.add(new Date(101,0,2));
		datySymulacji.add(new Date(101,0,7));
		datySymulacji.add(new Date(101,0,14));
		datySymulacji.add(new Date(101,1,1));
		datySymulacji.add(new Date(101,2,1));
		datySymulacji.add(new Date(101,3,1));
		datySymulacji.add(new Date(101,6,1));
		datySymulacji.add(new Date(102,0,1));
		datySymulacji.add(new Date(102,6,1));
		datySymulacji.add(new Date(103,0,1));
		datySymulacji.add(new Date(103,6,1));
		datySymulacji.add(new Date(104,0,1));
		datySymulacji.add(new Date(104,6,1));
		datySymulacji.add(new Date(105,0,1));
		datySymulacji.add(new Date(105,6,1));
		
		ZarzadcaProjekcji zarzadcaProjekcji = new ZarzadcaProjekcji();
		
		// modele
		Model zeroCurve = new ModelZeroCurve(MetodaInterpolacji.LINIOWA);
		zarzadcaProjekcji.dodajModel(zeroCurve);
		
		Konwencja konwencjaShortRate = Utils.getStandardKonwencja();
		Konwencja konwencjaIRS = Utils.getStandardKonwencja();
		
		Date dataNotowania = new Date(101,0,1);
		KontraktNaStopeProcentowa short1D = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(1,0,0,0),dataNotowania,99.99,konwencjaShortRate);
		KontraktNaStopeProcentowa short2D = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(2,0,0,0),dataNotowania,99.98,konwencjaShortRate);
		KontraktNaStopeProcentowa short1W = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,1,0,0),dataNotowania,99.90,konwencjaShortRate);
		KontraktNaStopeProcentowa short1M = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,0,1,0),dataNotowania,99.55,konwencjaShortRate);
		KontraktNaStopeProcentowa short3M = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,0,3,0),dataNotowania,98.15,konwencjaShortRate);
		KontraktNaStopeProcentowa short6M = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,0,6,0),dataNotowania,97,konwencjaShortRate);
		KontraktNaStopeProcentowa IRS1Y = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,0,0,1),dataNotowania,6.15,konwencjaIRS);
		KontraktNaStopeProcentowa IRS2Y = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,0,0,2),dataNotowania,6.20,konwencjaIRS);
		KrzywaStopyProcentowej krzywa = new KrzywaStopyProcentowej();
		krzywa.dodajKontrakt(short1D);
		krzywa.dodajKontrakt(short2D);
		krzywa.dodajKontrakt(short1W);
		krzywa.dodajKontrakt(short1M);
		krzywa.dodajKontrakt(short3M);
		krzywa.dodajKontrakt(short6M);
		krzywa.dodajKontrakt(IRS1Y);
		krzywa.dodajKontrakt(IRS2Y);
		
		
		ZmiennaObjasniajaca krzywaTerminowa = krzywa;
		zeroCurve.setZmiennaObjasniajaca(ModelZeroCurve.ZMIENNA_OBJASNIAJACA_STOPA_PROCENTOWA,krzywaTerminowa);

		// wykonanie projekcji
		zarzadcaProjekcji.wykonajProjekcjeMonteCarlo(datySymulacji, poczatekSymulacji, 1);
		
		TrajektoriaProcesu wynik = zarzadcaProjekcji.getMagazynWynikow().getTrajektorieSymulacji(zeroCurve, ModelZeroCurve.ZMIENNA_OBJASNIANA_STOPA_PROCENTOWA, 0);
		
		
	}

	
}
